package com.mtcarpenter.stream;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * @Author: mtcarpenter
 * @describe 了解 stream 集合（collect）
 * @Date: 2019/10/6
 * @Version 1.0
 */
public class StreamApi01Test {

    /**
     * 1 通过集合的方式创建 stream 流
     */
    @Test
    public void test01(){
        List<String> list = Arrays.asList("a","b","c","d");
        // 创建串行流
        Stream<String> stream = list.stream();
        // 创建并行流
        Stream<String> parallelStream = list.parallelStream();
    }

    /**
     * 2 通过 Stream.of() 的方式创建 stream 流
     */
    @Test
    public void test02(){
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
        // 为了显示效果 所以在提前终止 foreach 才能显示结果
        integerStream.forEach(System.out::println);

    }


    /**
     * 3 通过 Arrays.stream() 创建 stream 流
     */
    @Test
    public void test03(){
        int[] arr = new int[]{1,2,3,4,54,4};
        IntStream stream = Arrays.stream(arr);
        stream.forEach(System.out::println);
    }

    /**
     * 4 通过 iterate（迭代） 和 generate（生成） 创建无限流
     */
    @Test
    public void test05(){
        // 迭代
        Stream<Integer> iterate = Stream.iterate(0, t -> t + 2);
        iterate.forEach(System.out::println);
        //Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println);
        // 生成
        Stream<Double>  generate= Stream.generate(Math::random).limit(10);
        generate.forEach(System.out::println);
    }


}
